Vous devez activer Javascript pour accéder à ce site
Accueil  / Semaine 2 / Laboratoire avancé d’ETC

Laboratoire avancé d’ETC

Nous continuons à partir du projet précédent...

Cliquez sur la flèche qui part de CVS input et choisissez l’option effaçant le lien (« Delete hop ».

Nous allons maintenant filtrer les données pour ne retenir que les noms de villes. Allez chercher l’icône Select values et placez-la sur votre espace de travail. En maintenant le bouton Shift enfoncé, faites glisser l’icône CSV file input vers cette nouvelle icône. Répétez ensuite l’opération de Select values à XML Output. Vous devriez alors avoir une fenêtre qui ressemble à ceci :

Double-cliquez ensuite sur l’icône Select values et faites en sorte de ne sélectionner que le champ City comme ceci (choisir « get fields to select » au besoin et effacer les autres champs).

Appuyez sur Ok. De retour dans la fenêtre principale, faites Run.

Si tout s’est bien déroulé, vous devriez avoir un fichier XML dont le contenu ressemble à ceci :

<?xml version="1.0" encoding="UTF-8"?>
<Rows>
<Row><City>Montreal</City> </Row>
<Row><City>Lyon</City> </Row>
<Row><City>Montreal</City> </Row>
<Row><City>Washington</City> </Row>
<Row><City>Vancouver</City> </Row>
<Row><City>Montreal</City> </Row>
<Row><City>Montreal</City> </Row>
<Row><City>Montreal</City> </Row>
<Row><City>Montreal</City> </Row>
<Row><City>Montreal</City> </Row>
<Row><City>Lyon</City> </Row>
(...)

Allons un peu plus loin. Imaginons que nous voulions retirer les doublons. Pour éliminer les doublons, il faut d’abord trier les données. Allez chercher les icônes Sort rows et Unique rows et liez-les de cette manière :

Double-cliquez sur l’icône Sort rows et sélectionnez le champ City (appuyez sur get fields au besoin). Appuyez sur Ok, et relancez la transformation.

Vous devriez maintenant avoir un fichier XML ayant exactement ce contenu :

<?xml version="1.0" encoding="UTF-8"?>
<Rows>
<Row><City>Washington</City> </Row>
<Row><City>Vancouver</City> </Row>
<Row><City>Montreal</City> </Row>
<Row><City>Lyon</City> </Row>
<Row><City>London</City> </Row>
<Row><City>Dubai</City> </Row>
</Rows>

Les jointures

Hop peut aussi lier des données en faisant une jointure. Prenons comme exemple deux fichiers CSV. Le premier contient un identifiant et une ville correspondante ; le second contient le même identifiant lié cette fois-ci à un nom.

identifiant,ville
123, Montreal
44,Drummondville
identifiant,nom
123,Jean
44,Pierre

On souhaite associer le nom à la ville afin d’obtenir le résultat suivant :

nom,ville
Jean, Montreal
Pierre,Drummondville

On obtient le résultat désiré avec les outils Merge join et Select values :

Les outils Sort rows (du dossier Transform) ne servent qu’à préparer la jointure de type Merge join en triant le données sur l’identifiant :

La jointure (Merge join) se fait, quant à elle, en utilisant l’identifiant comme clé :

La dernière étape (Select values) sélectionne les deux seuls champs que nous désirons conserver (nom et ville) :

On pourrait alors charger le résultat dans un document XML ou dans une base de données.

Dérivation de nouveaux champs

On peut créer un nouveau champ avec l’outil Calculator. Imaginons que nous voulons ajouter le champ VILLE à l’exemple précédent avec l’intention d’y stocker le nom des villes en majuscules :

nom,ville,VILLE
Jean, Montreal,MONTREAL
Pierre,Drummondville,DRUMMONDVILLE

Il suffit d’ajouter l’outil Calculator :

Puis de configurer l’outil avec la fonction désirée :

Plusieurs autres fonctions sont supportées, incluant la somme ou le produit de deux champs, etc.

Lorsque vous effectuez une addition ou une multiplication, le premier champ détermine le type souhaité. Ainsi donc, si vous multipliez un entier avec un nombre à virgule flottante, une valeur entière sera retournée (par ex., 5*0.25 = 1). Si, par contre, vous multipliez un nombre avec virgule flottante à un entier, le résultat sera à virgule flottante (par ex., 5*0.25 = 1.25).

Opération Group By

Une autre opération fréquente dans les entrepôts de données est l’aggrégation de valeurs (par exemple, leur somme). Supposons que nous voulions transformer ce fichier original...

City,Sales
Montreal,10.00
Quebec, 20.00
Montreal, 10.00

... en un fichier contenant le total des ventes pour chaque ville :

City,Total Sales
Montreal,20.00
Quebec, 20.00

L’opération n’est pas difficile. Il faut cependant s’assurer, quand on utilise l’outil CSV Input, que les champs sont bien reconnus. Le champ City est de type « String » tandis que le champ « Sales » doit être de type « Number » avec le format ##.##. Normalement, cela devrait se faire tout seul, mais il importe de bien vérifier.

On souhaite donc regrouper les valeurs par ville. L’outil Group By est tout indiqué. On doit trier les données sur le groupe (ici la ville) avant de l’utiliser :

Il suffit ensuite de spécifier le groupe (ville) puis de définir un nouveau champ qui sera ici la somme sur les ventes :

Pour en savoir plus

Nous n’avons présenté qu’une esquisse de ce qui est possible avec Apache Hop. Nous vous invitons à prendre connaissance de la documentation officielle (en anglais)

Vous pouvez aussi consulter quelques vidéos illustrant des projets avancés réalisés avec Hop (en anglais) :